/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package devbureau.fstore.common.load.impl;

import devbureau.fstore.common.Item;
import devbureau.fstore.common.ItemImpl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.apache.log4j.Logger;

/**
 *
 * @author buyakov
 */
public class HelperFileParser {
   	private static Logger logger = Logger.getLogger(HelperFileParser.class);

    public static final String EMPTY_STR = "";
    public static final String EMPTY_PLANTATION = "------";

	public static final Integer PROVIDER_POS = 0;
    public static final Integer PLANTATION_POS = 1;
	public static final Integer NAME_POS = 2;
	public static final Integer LENGTH_POS = 3;
	public static final Integer DELIVERYDATE_POS = 4;
	public static final Integer QUANTITY_POS = 5;
	public static final Integer PRICE_POS = 6;

	public static final String DELIVERYDATE_FORMAT = "dd.MM.yyyy";

	public static final Set<String> emptyValues = new HashSet<String>();
	static{
		emptyValues.add("");
		emptyValues.add("*****");
	}

    
    public static Item parseData(String[] data) throws Exception {

        logger.debug("#parseData data = ");
        
        Item item = null;

			String provider = null;
            String plantation = null;
			Date deliveryDate =   null;
			Integer length = null;
			String name = null;
			Double price = null;
			Integer quantity = null;

			String errorMsg = "";

			// check provider
			provider = data[PROVIDER_POS].trim();
			if(provider == null || EMPTY_STR.equals(provider)) {
				errorMsg+= "\n'Поставщик' обязательное поле";
			}

            // check plantation
			plantation = data[PLANTATION_POS].trim();
			if(plantation == null || EMPTY_STR.equals(plantation)) {
				plantation = EMPTY_PLANTATION;
			}
            
			// check name
			name = data[NAME_POS].trim();
			if(name == null || EMPTY_STR.equals(name)) {
				errorMsg+= "\n'Наименование' обязательное поле";
			}

			// check length
			if(!emptyValues.contains(data[LENGTH_POS].trim())) {
				try{
					length = new Integer(data[LENGTH_POS].trim());
				}catch(NumberFormatException ex){
					errorMsg+="\nЗначение поля "+data[LENGTH_POS].trim()+" 'Длина' не является целым значением";
				}
			}

			// check deliveryDate
			try{
				deliveryDate =   new SimpleDateFormat(DELIVERYDATE_FORMAT).parse(data[DELIVERYDATE_POS]);
			}catch(ParseException ex){
				errorMsg+="\nЗначение поля " + data[QUANTITY_POS].trim() + " 'Дата поставки' не соответсвует маске " + DELIVERYDATE_FORMAT;
			}

			// check quantity
			if(!emptyValues.contains(data[QUANTITY_POS].trim())) {
				try{
					quantity = new Integer(data[QUANTITY_POS].trim());
				}catch(NumberFormatException ex){
					errorMsg+="\nЗначение поля " + data[QUANTITY_POS].trim() + " 'Количество' не является целым значением";
				}
			}

			// check price
			if(!emptyValues.contains(data[PRICE_POS].trim())) {

				try{
					price = new Double(data[PRICE_POS].trim().replace(',', '.'));
				}catch(NumberFormatException ex){
					errorMsg+="\nЗначение поля " + data[PRICE_POS].trim() + " 'Цена' не является значением цены";
				}
			}

			if(errorMsg.isEmpty()) {
				item = new ItemImpl(provider,name,length,deliveryDate,quantity,price,plantation);
			}else{
				throw new Exception("Ошибка при разборе строки : " + errorMsg);
			}

            return item;
    }
}
